{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# XGBoost Parameter Tuning for Rental Listing Inquiries Dataset"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第四步：调整树的参数：subsample 和 colsample_bytree\n",
    "(粗调，参数的步长为0.1；下一步是在粗调最佳参数周围，将步长降为0.05，进行精细调整)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先 import 必要的模块"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true,
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Variable Identification"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "选择该数据集是因为的数据特征单一，我们可以在特征工程方面少做些工作，集中精力放在参数调优上"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Target 分布，看看各类样本分布是否均衡"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x15079e80>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level);\n",
    "pyplot.xlabel('target');\n",
    "pyplot.ylabel('Number of interest_level');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "每类样本分布不是很均匀，所以交叉验证时也考虑各类样本按比例抽取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# drop ids and get labels\n",
    "y_train = train['interest_level']\n",
    "\n",
    "train = train.drop([\"interest_level\"], axis=1)\n",
    "X_train = np.array(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "各类样本不均衡，交叉验证是采用StratifiedKFold，在每折采样时各类样本按比例采样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# prepare cross validation\n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第二轮参数调整得到的n_estimators最优值（218），其余参数继续默认值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "用交叉验证评价模型性能时，用scoring参数定义评价指标。评价指标是越高越好，因此用一些损失函数当评价指标时，需要再加负号，如neg_log_loss，neg_mean_squared_error 详见sklearn文档：http://scikit-learn.org/stable/modules/model_evaluation.html#log-loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'colsample_bytree': [0.6, 0.7, 0.8, 0.9],\n",
       " 'subsample': [0.3, 0.4, 0.5, 0.6, 0.7, 0.8]}"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#max_depth 建议3-10， min_child_weight=1／sqrt(ratio_rare_event) =5.5\n",
    "subsample = [i/10.0 for i in range(3,9)]\n",
    "colsample_bytree = [i/10.0 for i in range(6,10)]\n",
    "param_test3_1 = dict(subsample=subsample, colsample_bytree=colsample_bytree)\n",
    "param_test3_1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda\\lib\\site-packages\\sklearn\\model_selection\\_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.58801, std: 0.00484, params: {'subsample': 0.3, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58545, std: 0.00315, params: {'subsample': 0.4, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58473, std: 0.00386, params: {'subsample': 0.5, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58388, std: 0.00405, params: {'subsample': 0.6, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58221, std: 0.00382, params: {'subsample': 0.7, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58152, std: 0.00365, params: {'subsample': 0.8, 'colsample_bytree': 0.6},\n",
       "  mean: -0.58844, std: 0.00286, params: {'subsample': 0.3, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58538, std: 0.00399, params: {'subsample': 0.4, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58465, std: 0.00337, params: {'subsample': 0.5, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58283, std: 0.00337, params: {'subsample': 0.6, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58196, std: 0.00303, params: {'subsample': 0.7, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58174, std: 0.00411, params: {'subsample': 0.8, 'colsample_bytree': 0.7},\n",
       "  mean: -0.58836, std: 0.00280, params: {'subsample': 0.3, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58539, std: 0.00390, params: {'subsample': 0.4, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58390, std: 0.00320, params: {'subsample': 0.5, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58281, std: 0.00341, params: {'subsample': 0.6, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58180, std: 0.00336, params: {'subsample': 0.7, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58189, std: 0.00319, params: {'subsample': 0.8, 'colsample_bytree': 0.8},\n",
       "  mean: -0.58781, std: 0.00353, params: {'subsample': 0.3, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58606, std: 0.00395, params: {'subsample': 0.4, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58512, std: 0.00463, params: {'subsample': 0.5, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58286, std: 0.00414, params: {'subsample': 0.6, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58225, std: 0.00389, params: {'subsample': 0.7, 'colsample_bytree': 0.9},\n",
       "  mean: -0.58192, std: 0.00406, params: {'subsample': 0.8, 'colsample_bytree': 0.9}],\n",
       " {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       " -0.58151897571251032)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb3_1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=218,  #第二轮参数调整得到的n_estimators最优值\n",
    "        max_depth=6,\n",
    "        min_child_weight=4,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch3_1 = GridSearchCV(xgb3_1, param_grid = param_test3_1, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch3_1.fit(X_train , y_train)\n",
    "\n",
    "gsearch3_1.grid_scores_, gsearch3_1.best_params_,     gsearch3_1.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "C:\\Anaconda\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 376.66200004,  425.04659991,  461.46820002,  484.21740003,\n",
       "         488.29779997,  488.11620002,  413.5224    ,  474.2678    ,\n",
       "         508.15560002,  524.86720004,  529.85799994,  543.64579992,\n",
       "         451.04199996,  512.2632    ,  565.01239996,  585.20400009,\n",
       "         588.42119994,  603.42459998,  495.36599998,  570.20959992,\n",
       "         621.78099999,  649.78080001,  652.15679998,  627.79799995]),\n",
       " 'mean_score_time': array([ 1.43779998,  1.32840004,  1.21900001,  1.21879997,  1.23800001,\n",
       "         1.21259999,  1.24659996,  1.2592    ,  1.20939999,  1.2224    ,\n",
       "         1.2       ,  1.1908    ,  1.26880002,  1.25939994,  1.21580005,\n",
       "         1.20599995,  1.19680004,  1.22520003,  1.28119993,  1.30020003,\n",
       "         1.24699998,  1.22519999,  1.25119996,  1.04679999]),\n",
       " 'mean_test_score': array([-0.58800507, -0.58545461, -0.58472817, -0.58387645, -0.58220531,\n",
       "        -0.58151898, -0.5884416 , -0.58538391, -0.58464884, -0.58283186,\n",
       "        -0.58195667, -0.58173813, -0.58836355, -0.58538727, -0.58390167,\n",
       "        -0.58280793, -0.5818002 , -0.58188904, -0.58780537, -0.58606482,\n",
       "        -0.58511667, -0.58285549, -0.58224665, -0.58191655]),\n",
       " 'mean_train_score': array([-0.49046423, -0.4834226 , -0.48027756, -0.47755063, -0.47603993,\n",
       "        -0.47671444, -0.48654261, -0.48036017, -0.47679328, -0.47438303,\n",
       "        -0.47369217, -0.47415708, -0.48305862, -0.47671661, -0.47317523,\n",
       "        -0.47157698, -0.47057801, -0.47194861, -0.48062557, -0.47402911,\n",
       "        -0.4712066 , -0.46892216, -0.46949545, -0.47018177]),\n",
       " 'param_colsample_bytree': masked_array(data = [0.6 0.6 0.6 0.6 0.6 0.6 0.7 0.7 0.7 0.7 0.7 0.7 0.8 0.8 0.8 0.8 0.8 0.8\n",
       "  0.9 0.9 0.9 0.9 0.9 0.9],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_subsample': masked_array(data = [0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8 0.3 0.4 0.5 0.6 0.7 0.8\n",
       "  0.3 0.4 0.5 0.6 0.7 0.8],\n",
       "              mask = [False False False False False False False False False False False False\n",
       "  False False False False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'colsample_bytree': 0.6, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.6, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.7, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.8, 'subsample': 0.8},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.3},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.4},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.5},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.6},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.7},\n",
       "  {'colsample_bytree': 0.9, 'subsample': 0.8}],\n",
       " 'rank_test_score': array([22, 19, 15, 12,  7,  1, 24, 17, 14, 10,  6,  2, 23, 18, 13,  9,  3,\n",
       "         4, 21, 20, 16, 11,  8,  5]),\n",
       " 'split0_test_score': array([-0.58040437, -0.58074251, -0.57909322, -0.57684204, -0.57571018,\n",
       "        -0.57547489, -0.58286747, -0.57925144, -0.57916607, -0.57654449,\n",
       "        -0.57717383, -0.5746414 , -0.58393765, -0.57970038, -0.57844616,\n",
       "        -0.57770072, -0.57718274, -0.57726595, -0.58151381, -0.57914143,\n",
       "        -0.57770109, -0.57542379, -0.57575147, -0.57479956]),\n",
       " 'split0_train_score': array([-0.4931768 , -0.48491703, -0.48295861, -0.47828327, -0.47797862,\n",
       "        -0.47758464, -0.48831583, -0.48286288, -0.47841933, -0.47616864,\n",
       "        -0.47442409, -0.47412814, -0.48441364, -0.47841217, -0.47391773,\n",
       "        -0.47146651, -0.4712953 , -0.47317865, -0.4830091 , -0.47490708,\n",
       "        -0.47250663, -0.46959824, -0.46873887, -0.47132281]),\n",
       " 'split1_test_score': array([-0.58454351, -0.58377045, -0.58193883, -0.5825891 , -0.58069487,\n",
       "        -0.57967195, -0.58890754, -0.5822832 , -0.58267037, -0.58249585,\n",
       "        -0.58062491, -0.58021636, -0.58711508, -0.58375495, -0.58328844,\n",
       "        -0.581844  , -0.57908915, -0.58007674, -0.58642229, -0.58532424,\n",
       "        -0.58288768, -0.58230622, -0.58096761, -0.58064747]),\n",
       " 'split1_train_score': array([-0.48993259, -0.48298993, -0.48007292, -0.47861876, -0.47567418,\n",
       "        -0.47624456, -0.48597676, -0.47956823, -0.47554943, -0.47364384,\n",
       "        -0.47285898, -0.47371859, -0.4819998 , -0.47649249, -0.47467011,\n",
       "        -0.47407949, -0.47135293, -0.47149404, -0.48003227, -0.47275917,\n",
       "        -0.47248464, -0.4718027 , -0.46989446, -0.47024269]),\n",
       " 'split2_test_score': array([-0.59090609, -0.58556815, -0.58480047, -0.58456801, -0.58283798,\n",
       "        -0.58266057, -0.58935876, -0.58739953, -0.58552619, -0.58378704,\n",
       "        -0.58220105, -0.58259819, -0.58904088, -0.58417273, -0.58351463,\n",
       "        -0.58150179, -0.58220442, -0.58117339, -0.58947932, -0.58645642,\n",
       "        -0.58616708, -0.58306369, -0.58280997, -0.5825882 ]),\n",
       " 'split2_train_score': array([-0.49040522, -0.48209608, -0.4786012 , -0.47683756, -0.4745194 ,\n",
       "        -0.47561854, -0.48743092, -0.47966533, -0.47676982, -0.47374824,\n",
       "        -0.47307298, -0.47543655, -0.48212074, -0.4773213 , -0.47308708,\n",
       "        -0.4705251 , -0.46849539, -0.47087191, -0.4806565 , -0.47386243,\n",
       "        -0.47048464, -0.46779225, -0.46784262, -0.4695925 ]),\n",
       " 'split3_test_score': array([-0.59042349, -0.58706396, -0.58886256, -0.58683846, -0.58528508,\n",
       "        -0.58377851, -0.59029077, -0.58793704, -0.58748544, -0.58588687,\n",
       "        -0.58350516, -0.58492762, -0.58927619, -0.58843374, -0.58685366,\n",
       "        -0.58541255, -0.58391165, -0.58566572, -0.59074194, -0.58846291,\n",
       "        -0.58729005, -0.58662903, -0.5842065 , -0.58558061]),\n",
       " 'split3_train_score': array([-0.48962146, -0.48454001, -0.48058249, -0.47624194, -0.47547331,\n",
       "        -0.47784665, -0.48467846, -0.47941633, -0.47593074, -0.47343149,\n",
       "        -0.47316846, -0.47352923, -0.48378892, -0.476158  , -0.47207318,\n",
       "        -0.471745  , -0.47114464, -0.47294302, -0.47924314, -0.47468807,\n",
       "        -0.46971943, -0.46907413, -0.47080975, -0.46972456]),\n",
       " 'split4_test_score': array([-0.59374962, -0.59012942, -0.58894704, -0.58854604, -0.58649976,\n",
       "        -0.58601032, -0.59078416, -0.59004979, -0.58839729, -0.58544586,\n",
       "        -0.5862797 , -0.58630846, -0.59244921, -0.59087624, -0.58740652,\n",
       "        -0.58758203, -0.58661453, -0.58526443, -0.59087042, -0.59094057,\n",
       "        -0.59153941, -0.58685594, -0.58749931, -0.58596816]),\n",
       " 'split4_train_score': array([-0.48918509, -0.48256995, -0.47917257, -0.47777162, -0.47655416,\n",
       "        -0.4762778 , -0.4863111 , -0.48028806, -0.47729706, -0.47492292,\n",
       "        -0.47493636, -0.4739729 , -0.48296999, -0.4751991 , -0.47212805,\n",
       "        -0.47006882, -0.47060181, -0.47125543, -0.48018683, -0.4739288 ,\n",
       "        -0.47083768, -0.46634349, -0.47019157, -0.47002628]),\n",
       " 'std_fit_time': array([  4.04480413,   3.81534481,   5.61900531,   7.51999801,\n",
       "          9.98378734,   9.05920518,   4.25394407,   5.76693868,\n",
       "          4.70177453,   6.89137591,   5.0763705 ,  10.93744231,\n",
       "         11.24842773,   6.46759331,   6.15038415,   5.00493984,\n",
       "          5.98922931,   7.01621578,   8.75074978,  11.15613518,\n",
       "          5.72749378,  12.75795165,  10.90274564,  49.4204225 ]),\n",
       " 'std_score_time': array([ 0.16220899,  0.11163621,  0.01698233,  0.0223464 ,  0.03965352,\n",
       "         0.02881391,  0.01165501,  0.01873394,  0.02126597,  0.02280878,\n",
       "         0.02095701,  0.04359537,  0.03199007,  0.02533449,  0.02062427,\n",
       "         0.01801109,  0.02333578,  0.0230686 ,  0.03441749,  0.0620077 ,\n",
       "         0.00600004,  0.03376028,  0.06685328,  0.12622265]),\n",
       " 'std_test_score': array([ 0.00483766,  0.00314622,  0.00385822,  0.00405451,  0.00381561,\n",
       "         0.0036475 ,  0.00286486,  0.00398927,  0.00337168,  0.0033682 ,\n",
       "         0.0030263 ,  0.00411044,  0.00279746,  0.00389578,  0.00320269,\n",
       "         0.00341442,  0.00336055,  0.00318828,  0.00353037,  0.00395364,\n",
       "         0.0046267 ,  0.00414292,  0.00388763,  0.00406335]),\n",
       " 'std_train_score': array([ 0.00141355,  0.00110958,  0.00150692,  0.00088855,  0.00116532,\n",
       "         0.00085458,  0.00124758,  0.00128605,  0.00101878,  0.00103292,\n",
       "         0.00082893,  0.00067205,  0.00093573,  0.0010868 ,  0.00101043,\n",
       "         0.00139169,  0.00107461,  0.00093255,  0.00127576,  0.00075573,\n",
       "         0.00111288,  0.00182778,  0.0010654 ,  0.00061419])}"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch3_1.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.581519 using {'subsample': 0.8, 'colsample_bytree': 0.6}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x16781f28>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch3_1.best_score_, gsearch3_1.best_params_))\n",
    "test_means = gsearch3_1.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch3_1.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch3_1.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch3_1.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch3_1.cv_results_).to_csv('my_preds_subsampleh_colsample_bytree_1.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(colsample_bytree), len(subsample))\n",
    "train_scores = np.array(train_means).reshape(len(colsample_bytree), len(subsample))\n",
    "\n",
    "for i, value in enumerate(colsample_bytree):\n",
    "    pyplot.plot(subsample, -test_scores[i], label= 'test_colsample_bytree:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'subsample' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( 'subsample_vs_colsample_bytree1.png' )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
